package br.com.sistemasaude.dao;

import java.util.ArrayList;
import java.util.List;
import javax.persistence.EntityManager;
import javax.persistence.Query;

import br.com.sistemasaude.bean.Convenio;
import br.com.sistemasaude.bean.Especialidade;
import br.com.sistemasaude.bean.Produto;
import br.com.sistemasaude.util.JpaUtil;

public class EspecialidadeDaoImpl implements EspecilidadeDAO {
	
	private final GenericDAO<Especialidade> dao;	
	
	EntityManager em = new JpaUtil().getEntityManager();
	
	public EspecialidadeDaoImpl() {
		dao = new GenericDAO<Especialidade>(em, Especialidade.class);
		}
	
	public void salvar(Especialidade especialidade) {
		
		try {

			em.getTransaction().begin();
			dao.salvar(especialidade);
			em.getTransaction().commit();

		} catch (Exception e) {
			
			em.getTransaction().rollback();
			e.printStackTrace();
			
		} finally {
			em.close();
		}
		
	}

	public boolean update(Especialidade especialidade){
		try {

			em.getTransaction().begin();
			dao.update(especialidade);
			em.getTransaction().commit();
			return true;

		} catch (Exception e) {
			
			em.getTransaction().rollback();
			e.printStackTrace();
			return false;
		} finally {
			em.close();
		}
		
	}
	
	public List<Especialidade> listar(){
		
		List<Especialidade> listaEspecialidades = new ArrayList<Especialidade>();
		try {

			listaEspecialidades = dao.listar();

		} catch (Exception e) {
			
			e.printStackTrace();
			
		} finally {
			em.close();
		}
		
		return listaEspecialidades;
		
	}
	
	public Especialidade buscar(Especialidade especialidade){
		
		Query query = em.createQuery("from Especialidade e where e.descricao = :descricao ");
		query.setParameter("descricao", especialidade.getDescricao());

		return (Especialidade) query.getSingleResult();
	}	

}
